/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ifpb.pp.rh.managedbean;

import ifpb.pp.rh.dao.DAO;
import ifpb.pp.rh.entity.Lembrete;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;

/**
 *
 * @author Gabriella
 */
@Controller
public class LembreteManaged {

    @Autowired
    private DAO dao;
    private Lembrete lembrete;
    private DataModel model;

    public LembreteManaged() {
        this.lembrete = new Lembrete();
       
//        this.dao = new DAOJPA();
    }

//@PostConstruct
//    public void init() {
//
//        System.out.println("inicializandooooo managed bean..");
//        AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:ifpb/pp/rh/resource/spring-annotation*.xml");
//        ctx.getAutowireCapableBeanFactory().autowireBean(dao);
////       dao = (DAO) ctx.getBean("dao");
////        ctx.registerShutdownHook();
//    }

    public Lembrete getLembrete() {
        return lembrete;
    }

    public void setLembrete(Lembrete lembrete) {
        this.lembrete = lembrete;
    }

    public String novoLembrete() {
        this.lembrete = new Lembrete();
        return "lembreteCriado";
    }

    public String cadastrarLembrete() {
        try {
            System.out.println("LEmbrete" + lembrete);
            if (this.dao.salvar(lembrete)) {
                this.novoLembrete();
                return "lembreteCadastrado";
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return "erroLembreteCadastrado";
    }

    public Lembrete getLembreteModificar() {
        Lembrete lembreteEscolhido = (Lembrete) this.model.getRowData();
        return lembreteEscolhido;

    }

    public DataModel getListaDeLembretes() {
        List<Lembrete> listaLembretes;
        try {
            listaLembretes = (List<Lembrete>) this.dao.buscarTodos(Lembrete.class);
            System.out.println("LISTAAA   " + listaLembretes.size());
            this.model = new ListDataModel(listaLembretes);
            System.out.println("AAAAAAA" + this.model.getRowCount());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return this.model;
    }

    public String editarLembrete() {
        Lembrete l = getLembreteModificar();
        this.setLembrete(l);
        return "editarLembrete";
    }

    public String atualizarLembrete() {
        Boolean resposta = false;
        try {
            resposta = this.dao.atualizar(this.lembrete);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        if (resposta) {
            return "listarLembretes";
        }
        return "ErroAtualizarLembrete";

    }

    public String remover() {
        try {

            Lembrete lembrete = getLembreteModificar();
            System.out.println("MOdificar" + lembrete.getMensagem());
            Map<Integer, Object> param = new HashMap<Integer, Object>();
            param.put(1, lembrete.getMensagem());
            Lembrete novoLembrete = this.dao.consultaSimples("lembrete.msg", param);
            if (dao.remover(novoLembrete)) {
                return "listarLembretes";
            }
        } catch (Exception ex) {
            System.out.println("ERRO em remover lembrete");
            ex.printStackTrace();
        }
        return "erroListarLembrete";
    }
}
